import router from '@/router'
import store from './store'

router.beforeEach(async(to, from, next) => {
  // 写法一
  const url = to.path
  const token = store.getters.token
  const whiteList = ['/login', '/404', '/test']
  // 1 有登陆
  //   1.1 去登陆页 => 跳首页
  if (token && url === '/login') {
    next('/')
  }
  //   1.2 不去登录页 => 放行
  if (token && url !== '/login') {
    // 登录后进入正常页面之前，确保获取用户数据
    if (Object.keys(store.state.user.profile).length === 0) {
      // {} 永远为 true, 需要判断里面的属性值
      await store.dispatch('user/getProfile')
      // 这里拿完数据以后, 当前用户的 menus 就存在
      // 可以进行路由筛选(必须是next之前)
      const menus = store.state.user.profile.roles.menus
      const res = await store.dispatch('permission/filterRoutes', menus)
      console.log('导航守卫获取到的信息', res)
      router.addRoutes([
        ...res,
        { path: '*', redirect: '/404', hidden: true }
      ])
      // 追加完路由后，应该将当前的目的地 to.path作为路径
      // 重新跳转一次，目的是再次触发导航守卫,才能正常进入页面
      return next(to.path)
    }
    next()
  }
  // 2 没登录
  //   2.1 在白名单 => 放行
  if (!token && whiteList.indexOf(url) !== -1) {
    next()
  }
  //   2.2 不在白名单 => 跳登录页
  if (!token && whiteList.indexOf(url) === -1) {
    next('/login')
  }
// //写法二
  //   // 判断是否登录
  //   if (store.getters.token) {
  //     // 这里表示已登录
  //     // 判断是否去登录页
  //     if (to.path === '/login') {
  //       // next 如果传入url可以跳转页面
  //       next('/')
  //     } else {
  //       next()
  //     }
  //   } else {
  //     // 这里表示未登录
  //     // 判断是否在允许非登陆用户访问白名单中
  //     const whiteList = ['/login', '/404', '/test']
  //     if (whiteList.indexOf(to.path) !== -1) {
  //       // 在白名单随便进
  //       next()
  //     } else {
  //       next('/login')
  //     }
  //   }
})
